package Interfaz;

import javax.swing.JFrame;
import javax.swing.JPanel;


import javax.swing.JFileChooser;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.ImageIcon;
import javax.swing.JDesktopPane;
import javax.swing.GroupLayout;
import javax.swing.BoxLayout;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;

import java.awt.Color;
import java.awt.ComponentOrientation;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;




import Imagenes.imagenesAplicacion;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.JLabel;








import javax.swing.GroupLayout.Alignment;
import javax.swing.LayoutStyle.ComponentPlacement;

import java.awt.Font;

/**Crea una clase llamada ventanaPrincipal que va ser la ventana principal de la intefaz, hereda de JFrame
*que es una ventana de una biblioteca de Java y implementa IConstantes que son las imagenes usadas en el 
proyecto*/
public class ventanaPrincipal extends JFrame implements imagenesAplicacion  
{
        private JDesktopPane ventana; 
        private JMenu menuRegistro;          
        private JMenu menuConfiguracion;     
        private JMenu menuAgregar;           
        private JMenu menuConsultar;         
        private JMenu menuSalir;             
        private JLabel lblNewLabel_1;
        private JPanel panel = new JPanel(); 
        private JLabel  Bienvenido; 
        private JFileChooser ventaBuscador; 
        private static ventanaPrincipal miVentanaPrincipal; 
        private ImageIcon log = new ImageIcon(imagenLogo);

        
        // Metodo get para crear un objeto que va ser la ventana principal
        public static ventanaPrincipal getInstance()
        {
                if(miVentanaPrincipal == null)
                {
                        miVentanaPrincipal = new ventanaPrincipal();
                }
                return miVentanaPrincipal;
        }
        
    // Metodo para establacer como sera la ventana principal y que cosas tendra 
        private ventanaPrincipal() 
        {
        		setTitle("Pet Rescue"); // Titulo de la ventana
        		setIconImage(Toolkit.getDefaultToolkit().getImage(ventanaPrincipal.class.getResource("/Imayarc/Imagenes/logo.png"))); // Inserta el icono del logo miniatura en la esquina superior izquierda
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // set para cerrar la ventana
                setBounds(-8, 0, 1296, 760); // Un set donde se ingresan 4 valores los 2 primeros son las coordenas x, y donde aparecera la ventana en la pantalla y los otros 2 el ancho y altura respectivamente
                getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS)); // Hace que en la ventana se coloquen los elementos horizontalmente
                
                
                ventana = new JDesktopPane(); // Constructor llamado ventana del DesktopPane que permite desplegar varias ventanas
                ventana.setBackground(new Color(255,255,255)); // Le da color a ventana
                getContentPane().add(ventana); //Añade ventana al contenedor
                
                panel.setBackground(new Color(102, 204, 102));
        		panel.setSize(534, 5000);
        		JScrollPane scrollPane = new JScrollPane(panel);
        		scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        		scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        		scrollPane.setAutoscrolls(true);
        		
        		JLabel lblNewLabel = new JLabel("");
        		lblNewLabel.setFont(new Font("Tahoma", Font.PLAIN, 36));
        		
        		lblNewLabel_1 = new JLabel("");
        		lblNewLabel_1.setSize(new Dimension(620, 400));
                
                // Crea un Label que se usa para mostrar texto en pantalla de la interfaz
                Bienvenido = new JLabel("");  // Constructor
                Bienvenido.setFont(new Font("Lucida Handwriting", Font.PLAIN, 60)); // Ponemos el tipo de letra y tama�o a usar
                
                //Crea un contenedor desplegable para el men� principal
                GroupLayout gl_escritorio = new GroupLayout(ventana);
        		gl_escritorio.setHorizontalGroup(
        			gl_escritorio.createParallelGroup(Alignment.LEADING)
        				.addGroup(gl_escritorio.createSequentialGroup()
        					.addGap(101)
        					.addGroup(gl_escritorio.createParallelGroup(Alignment.TRAILING)
        						.addComponent(lblNewLabel, GroupLayout.PREFERRED_SIZE, 384, GroupLayout.PREFERRED_SIZE)
        						.addComponent(lblNewLabel_1))
        					.addPreferredGap(ComponentPlacement.RELATED, 37, Short.MAX_VALUE)
        					.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 498, GroupLayout.PREFERRED_SIZE))
        		);
        		gl_escritorio.setVerticalGroup(
        			gl_escritorio.createParallelGroup(Alignment.LEADING)
        				.addGroup(gl_escritorio.createSequentialGroup()
        					.addGroup(gl_escritorio.createParallelGroup(Alignment.LEADING)
        						.addGroup(gl_escritorio.createSequentialGroup()
        							.addGap(11)
        							.addComponent(lblNewLabel, GroupLayout.PREFERRED_SIZE, 68, GroupLayout.PREFERRED_SIZE)
        							.addPreferredGap(ComponentPlacement.RELATED)
        							.addComponent(lblNewLabel_1, GroupLayout.PREFERRED_SIZE, 470, GroupLayout.PREFERRED_SIZE))
        						.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 672, GroupLayout.PREFERRED_SIZE))
        					.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                );
                
              //  ImageIcon portada = new ImageIcon(ventanaPrincipal.class.getResource("/Imayarc/Imagenes/prueba.png"));
        		//lblNewLabel_1.setIcon(new ImageIcon(portada.getImage().getScaledInstance(lblNewLabel_1.getWidth(), lblNewLabel_1.getHeight(), Image.SCALE_SMOOTH)));
                
  
                ventana.setLayout(gl_escritorio); 
                
                JMenuBar menuPrincipal = new JMenuBar(); // Crea un Menu tipo JMenuBar que es horizontal despegable
                menuPrincipal.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT); //Iconos del men� colocados de izquierda a derecha
                menuPrincipal.setBackground(new Color(12,207,200)); // Le da color al menu principal 
                setJMenuBar(menuPrincipal);
                
                
                // Crea un objeto de tipo JMenu y lo agrega a menu principal es como un submenu 
                menuRegistro = new JMenu(""); 
                menuRegistro.setIcon(new ImageIcon(imagenLogin)); // Inserta una imagen
                menuPrincipal.add(menuRegistro);
                
                //  Crea la opcion de agregar un nuevo usuario al sistema, es un item del Submenu registro
                JMenuItem itemCrearCuenta = new JMenuItem("Crear cuenta");
                itemCrearCuenta.addActionListener(new ActionListener() { // Cuando se de clic se abra la ventanaRegistro Usuario
                        public void actionPerformed(ActionEvent arg0) 
                        {
                                ventanaAgregarPersona.getInstance().setVisible(true); // Llama a la ventana Registro usuario
                        }
                });
                itemCrearCuenta.setIcon(new ImageIcon(imagenUser));
                itemCrearCuenta.setBackground(new Color(12,207,200));
                menuRegistro.add(itemCrearCuenta);
                
                // -El siguiente codigo es para crear otra opcion pero en este caso es iniciar secion, misma logica que el anterior-----//
                JMenuItem itemIniciarSecion = new JMenuItem("Iniciar Sesión");
                itemIniciarSecion.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) 
                        {
                                 ventanaLogin.getInstance().setVisible(true);
                        }
                });
                itemIniciarSecion.setIcon(new ImageIcon(imagenIniciar));
                itemIniciarSecion.setBackground(new Color(12,207,200));
                menuRegistro.add(itemIniciarSecion);
                //-------------------------------------------------------------------------------------------------
                // Codigo similar a los anteriormente mencionados
                JMenuItem itemCerrarSecion = new JMenuItem("Cerrar Sesión");
                itemCerrarSecion.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e)
                        {
                                // codigo
                                desactivarAplicacion();
                        }
                });
                itemCerrarSecion.setIcon(new ImageIcon(imagenCerrar));
                itemCerrarSecion.setBackground(new Color(12,207,200));
                menuRegistro.add(itemCerrarSecion);
                //---------------------------------------------------------------------
                
                //  Crea un nuevo submenu y lo agrega en el menu principal 
                menuConfiguracion = new JMenu(""); // 
                menuConfiguracion.setIcon(new ImageIcon(imagenConfiguracion));
                menuPrincipal.add(menuConfiguracion);
                
                // Al igual que el submenu anterior se le creaban opciones en este caso se crea un configurar preferencias del sistema
                JMenuItem itemconfig = new JMenuItem("Configurar preferencias");
                itemconfig.setIcon(new ImageIcon(imagenConfig));
                itemconfig.setBackground(new Color(12,207,200));
                itemconfig.addActionListener(new ActionListener() { 
                        public void actionPerformed(ActionEvent arg0)
                        {
                        	//ventanaConfiguracionPreferencias.getInstance().setVisible(true);
                             
                        }
                });
                
                menuConfiguracion.add(itemconfig);
                
                
                JMenuItem casaCuna = new JMenuItem("Casa Cuna");
                casaCuna.setIcon(new ImageIcon(imagenConfig));
                casaCuna.setBackground(new Color(12,207,200));
                casaCuna.addActionListener(new ActionListener() { 
                        public void actionPerformed(ActionEvent arg0)
                        {
                        	ventanaConfiguracionPreferencias.getInstance().setVisible(true);
                             
                        }
                });
                
                menuConfiguracion.add(casaCuna);
 
                
                //Crea un nuevo Submenu Agregar para agregar articulos
                menuAgregar = new JMenu("");
                menuAgregar.setIcon(new ImageIcon(imagenAgregar));
                menuPrincipal.add(menuAgregar);
                
                // Codigo similar a anteriores ya explicados
                JMenuItem itemAgregarMascota = new JMenuItem("Agregar Mascota");
                itemAgregarMascota.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e)
                        {
                              RegistroMascota.getInstance().setVisible(true);
                        }
                });
                itemAgregarMascota.setBackground(new Color(12,207,200));
                itemAgregarMascota.setIcon(new ImageIcon(imagenMascota));
                menuAgregar.add(itemAgregarMascota);
                
         
                // Item para agregar personas desde un archivo
                JMenuItem EditarPersonas = new JMenuItem("Editar Persona");
                EditarPersonas.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e)  
                        {
                               ventanaEditarPersona.getInstance().setVisible(true);
                        }
                });
                EditarPersonas.setBackground(new Color(12,207,200));
                EditarPersonas.setIcon(new ImageIcon(imagenpersona));
                menuAgregar.add(EditarPersonas);
                
      
                JMenuItem EditarMascotas = new JMenuItem("Editar Mascota");
                EditarMascotas.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e)  
                        {
                               ventanaEditarMascota.getInstance().setVisible(true);
                        }
                });
                EditarMascotas.setBackground(new Color(12,207,200));
                EditarMascotas.setIcon(new ImageIcon(imageneditarmascota));
                menuAgregar.add(EditarMascotas);
                
                
                // Nuevo submenu para consultas de articulos 
                menuConsultar = new JMenu("");
                menuConsultar.setIcon(new ImageIcon(imagenRevisar));
                menuPrincipal.add(menuConsultar);
                
                JMenuItem ItemListaNegra= new JMenuItem("Lista negra");
                ItemListaNegra.setIcon(new ImageIcon(imagenLista));
                ItemListaNegra.setBackground(new Color(12,207,200));
                menuConsultar.add(ItemListaNegra);
                
                JMenuItem consultarPersona= new JMenuItem("Consultar Persona");
                consultarPersona.setIcon(new ImageIcon(imageneditarpersona));
                consultarPersona.setBackground(new Color(12,207,200));
                consultarPersona.addActionListener(new ActionListener(){
                	public void actionPerformed(ActionEvent e){
                		ventanaConsultarPersonas.getInstance().setVisible(true);
                		ventanaConsultarPersonas.getInstance().cargarPersonas();
                	}
                });
                menuConsultar.add(consultarPersona);
                
                JMenuItem consultarMascota= new JMenuItem("Consultar Mascota");
                consultarMascota.setIcon(new ImageIcon(imageneditarmascota));
                consultarMascota.setBackground(new Color(12,207,200));
                menuConsultar.add(consultarMascota);
                
                //Menu para salir
                menuSalir = new JMenu("");
                menuSalir.addMouseListener(new MouseAdapter() { 
                        @Override
                        public void mouseClicked(MouseEvent arg0)  // metodo para cuando se hace click terminar el sistema
                        {
                                System.exit(0);
                        }
                });
                menuSalir.setIcon(new ImageIcon(imagenSalir));
                menuPrincipal.add(menuSalir);
                
              
              //  desactivarAplicacion(); // Mantiene los menus configuracion, agregar y consultar desahibilitados

                
                /* Label cuyo objetivo es correr espacios en blanco para insertar el logo al final del contenedor */
                JLabel espacio = new JLabel("                                                                                                                                                                                                                                                                                                ");
                menuPrincipal.add(espacio);
                
                JLabel imagenlogo = new JLabel(""); // Etiqueta de texto vacia para insertar el icono
                imagenlogo.setIcon(new ImageIcon(log.getImage().getScaledInstance(100, 100, 10000))); // agrega la imagen del logo
                menuPrincipal.add(imagenlogo); // agrega componente
                
                ventaBuscador = new JFileChooser(); //Crea un objeto de tipo JFileChooser llamado ventaBuscador para busqueda de archivos
                
                ventana.add(ventanaEditarPersona.getInstance());
                ventana.add(ventanaLogin.getInstance());
                ventana.add(ventanaAgregarPersona.getInstance());
                ventana.add(RegistroMascota.getInstance());
                ventana.add(ventanaConsultarPersonas.getInstance());
                //ventana.add(ventanaConfiguracionPreferencias.getInstance());
                ventana.add(ventanaEditarMascota.getInstance());
                setExtendedState(JFrame.MAXIMIZED_BOTH);
        		setVisible(true);
        }
        
        public void activarAplicacion() // Habilita las ventanas
        {
                
                menuConfiguracion.setEnabled(true);
                menuAgregar.setEnabled(true);
                menuConsultar.setEnabled(true);
                Bienvenido.setText(" ¡¡¡Bienvenido!!!"); 
                Bienvenido.setForeground(new Color(0, 80, 80 ));
        }
        
        public void desactivarAplicacion()
        {
                menuConfiguracion.setEnabled(false);
                menuAgregar.setEnabled(false);
                menuConsultar.setEnabled(false);
                Bienvenido.setText("");
        }}